IP Address Binding এবং Port Allocation নেটওয়ার্ক প্রোগ্রামিং এবং সংযোগ ব্যবস্থাপনার ক্ষেত্রে অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। এ দুটি প্রক্রিয়া Socket-এর মাধ্যমে সঠিকভাবে সংযোগ স্থাপন এবং ডেটা আদান-প্রদানের জন্য প্রয়োজনীয়। নিচে IP Address Binding এবং Port Allocation-এর ব্যাখ্যা এবং প্রয়োজনীয়তা নিয়ে বিস্তারিত আলোচনা করা হলো।
IP Address Binding হলো Socket-কে একটি নির্দিষ্ট IP Address-এর সাথে সংযুক্ত করার প্রক্রিয়া। এটি Socket-এর মাধ্যমে নেটওয়ার্কে সুনির্দিষ্ট IP Address থেকে ডেটা পাঠানো এবং গ্রহণ করা সম্ভব করে তোলে।
Address Family নির্ধারণ করা:
Socket তৈরি করা:
socket()
ফাংশন ব্যবহার করা হয়:int sockfd = socket(AF_INET, SOCK_STREAM, 0);
Address Structure সেটআপ করা:
struct sockaddr_in
(IPv4) বা struct sockaddr_in6
(IPv6) ব্যবহার করে Address Structure সেটআপ করা হয়। IP Address এবং Port Number সঠিকভাবে নির্ধারণ করা হয়:struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET; // IPv4 Address Family
server_addr.sin_addr.s_addr = INADDR_ANY; // যে কোনো IP Address গ্রহণ করতে
server_addr.sin_port = htons(8080); // পোর্ট নম্বর
INADDR_ANY
ব্যবহার করা হলে, সার্ভার সমস্ত নেটওয়ার্ক ইন্টারফেসের (উদাহরণস্বরূপ, লোকালহোস্ট এবং অন্যান্য ইন্টারফেস) জন্য ইনকামিং সংযোগ গ্রহণ করতে প্রস্তুত থাকে।Binding করা:
bind()
ফাংশন ব্যবহার করে Socket-কে IP Address এবং Port Number-এর সাথে সংযুক্ত করা হয়:if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(sockfd);
exit(EXIT_FAILURE);
}
Port Allocation হলো একটি Socket-কে নির্দিষ্ট Port Number দিয়ে সংযুক্ত করা, যাতে প্রক্রিয়াগুলো নেটওয়ার্কে ডেটা পাঠাতে এবং গ্রহণ করতে পারে। Port Allocation নেটওয়ার্কে বিভিন্ন সার্ভিস এবং অ্যাপ্লিকেশন আলাদা করতে সাহায্য করে। এটি বিভিন্ন TCP এবং UDP সার্ভিসগুলোর জন্য ভিন্ন পোর্ট ব্যবহার নিশ্চিত করে।
প্রক্রিয়া এবং সার্ভিস সনাক্তকরণ:
প্রক্রিয়াগুলোর মধ্যে আলাদা সংযোগ নিশ্চিত করা:
Well-known এবং Dynamic Ports:
Security এবং Access Control:
নিচে একটি TCP Server-এর উদাহরণ দেওয়া হলো যেখানে IP Address Binding এবং Port Allocation করা হয়েছে:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int server_fd;
struct sockaddr_in server_addr;
// 1. Socket তৈরি করা
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 2. ঠিকানা সেটআপ করা
server_addr.sin_family = AF_INET; // IPv4 Address Family
server_addr.sin_addr.s_addr = INADDR_ANY; // যে কোনো IP Address গ্রহণ করতে
server_addr.sin_port = htons(PORT); // পোর্ট নম্বর
// 3. Binding করা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Socket successfully bound to port %d\n", PORT);
// Listening এবং অন্যান্য কাজ এখানে যুক্ত করা যেতে পারে...
// 4. Socket বন্ধ করা
close(server_fd);
return 0;
}
common.read_more